/*
 * 0587. 两数之和 - 不同组成
 * 给一整数数组, 找到数组中有多少组 不同的元素对 有相同的和, 且和为给出的 target 值, 返回对数.
 * 
 * 样例
 * 给一数组 nums = [1,1,2,45,46,46], target = 47, 返回 2
 * 1 + 46 = 47
 * 2 + 45 = 47
 * 
 * 2018.07.12 @jeyming
 */
package two_sum_unique_pairs_0587;

import java.util.ArrayList;
import java.util.List;


public class Two_sum_unique_pairs_0587 {
    /**
     * @param nums: an array of integer
     * @param target: An integer
     * @return: An integer
     */
    public static int twoSum6(int[] nums, int target) {
        // write your code here
    	int cnt = 0;
    	//方法一：利用List的属性
    	List<Integer> list = new ArrayList<Integer>();
    	//Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    	for(int i = 0; i < nums.length; ++i) {
    		for(int j = i + 1; j < nums.length; ++j) {
    			if(nums[i] + nums[j] == target) {
    				if(list.contains(nums[i]) == true && list.contains(nums[j]) == true) {
    					break;
    				}
    				list.add(nums[i]);
    				list.add(nums[j]);
    				++cnt;
    				break;
    			}
    		}
    	}
    	System.out.println();
    	//方法二：先处理重复的数组
//    	int slow = 1;
//    	int fast = 1;
//    	Arrays.sort(nums, 0 , nums.length);
//    	for(fast = 1; fast < nums.length; ++fast) {
//    		if(nums[fast] != nums[slow - 1]) {
//    			nums[slow++] = nums[fast];
//    		}
//    	}
//    	for(int i = 0; i < slow - 1; ++i) {
//    		for(int j = i + 1; j < slow ; ++j) {
//    			if(nums[i] + nums[j] == target) {
//    				++cnt;
//    				break;
//    			}
//    		}
//    	}
    	return cnt;
    }

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int nums[] = {1,1,2,45,46,46};
		System.out.println(twoSum6(nums,47));
	}

}
